package com.wangshili.sys.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.transaction.annotation.Transactional;

import com.wangshili.pojo.sys.entity.SysUser;
import com.wangshili.sys.vo.SysUserDept;
import com.wangshili.sys.vo.SysUserDeptRole;

/**
 * 用户管理持久层接口
 * @author wangshili
 *
 */
@Mapper
public interface SysUserDao {
	/**
	 * 统计该名字出现的次数，可以为空，为空的话就是全部数据数量
	 * 主要是用于分页的信息数量显示
	 * @param name 
	 * @return
	 */
	int countRowByName(String name);
	
	@Select("select * from sys_users where username = #{username}")
	SysUser selectUserByUserName(String username);
	/**
	 * 根据用户名进行排序并分页
	 * @param username
	 * @param startIndex 起始位置
	 * @param pageSize  每页显示数据行数
	 * @return
	 */
	List<SysUserDept> listPageObject(
			@Param("username")String username);
	
	
	/**
	 * 根据id更新禁用状态
	 * @param id user的id
	 * @param valid 状态
	 * @param modifiedUser 修改人
	 * @return
	 */
	int updateValidById(
			@Param("id")Integer id,
			@Param("valid")Integer valid,
			@Param("modifiedUser")String modifiedUser);
	
	/**
	 * 更新用户信息
	 * @param entity
	 * @return
	 */
	int updateObject(SysUser entity);
	
	/**
	 * 插入一条用户信息，返回插入的id
	 * @param entity
	 * @return
	 */
	int insertObject(SysUser entity);
	
	/**
	 * 根据id查询 一条用户信息,包含部门信息和角色id
	 * @param id 
	 * @return
	 */
	@Transactional
	SysUserDeptRole selectUserDeptRolIdsById(Integer id);
	
	/**
	 * 根据用户id更新密码，盐值
	 * @param password
	 * @param salt
	 * @param id
	 * @return
	 */
	int updatePassword(
            @Param("password")String password,
            @Param("salt")String salt,
            @Param("id")Integer id);
}
